stecken
Goto Top

PowerShell "Login Script" läuft als Scheduled Task nicht

Hallo zusammen,

ich stecke bei folgendem Problem fest:
Ziel ist es, dass wenn sich ein User auf einem Server anmeldet ein Abfragefenster kommt und nach Eingabe einer Bemerkung und "OK" daraufhin eine Email versendet wird.
Das Power Shell Script mit der Abfrage und dem Senden der Email funktioniert bei einem manuellen Aufruf wunderbar.
Als Scheduled Task funktioniert es auch auf meinem Windows 10 Client. Allerdings funktioniert es als Scheduled Task nicht auf einem Server (2016, 2022 egal...). Der Scheduled Task gibt zwar an, dass er erfolgreich gelaufen ist (0x0), allerdings ist das Script nicht wirklich gelaufen.
Da die Server über diverse GPO´s gehärtet sind bin ich mir ziemlich sicher, dass da etwas dazwischenfunkt, bloß habe ich noch nicht herausfinden können welche Regel das sein könnte.
Vielleicht die Remote Execution Policy...
Das Script sieht wie folgt aus, vielleicht weiß ja jemand wodurch dessen Ausführung als Scheduled Task geblockt sein könnte.

Add-Type -AssemblyName System.Windows.Forms
Add-Type -AssemblyName System.Drawing

$form = New-Object System.Windows.Forms.Form
$form.Text = 'Data Entry Form'  
$form.Size = New-Object System.Drawing.Size(300,200)
$form.StartPosition = 'CenterScreen'  

$okButton = New-Object System.Windows.Forms.Button
$okButton.Location = New-Object System.Drawing.Point(75,120)
$okButton.Size = New-Object System.Drawing.Size(75,23)
$okButton.Text = 'OK'  
$okButton.DialogResult = [System.Windows.Forms.DialogResult]::OK
$form.AcceptButton = $okButton
$form.Controls.Add($okButton)

$cancelButton = New-Object System.Windows.Forms.Button
$cancelButton.Location = New-Object System.Drawing.Point(150,120)
$cancelButton.Size = New-Object System.Drawing.Size(75,23)
$cancelButton.Text = 'Cancel'  
$cancelButton.DialogResult = [System.Windows.Forms.DialogResult]::Cancel
$form.CancelButton = $cancelButton
$form.Controls.Add($cancelButton)

$label = New-Object System.Windows.Forms.Label
$label.Location = New-Object System.Drawing.Point(10,20)
$label.Size = New-Object System.Drawing.Size(280,20)
$label.Text = 'Please enter your name and reason for login:'  
$form.Controls.Add($label)

$textBox = New-Object System.Windows.Forms.TextBox
$textBox.Location = New-Object System.Drawing.Point(10,40)
$textBox.Size = New-Object System.Drawing.Size(260,20)
$form.Controls.Add($textBox)

$form.Topmost = $true

$form.Add_Shown({$textBox.Select()})
$result = $form.ShowDialog()

if ($result -eq [System.Windows.Forms.DialogResult]::OK)
{
    $x = $textBox.Text
    $date = Get-Date
    Send-MailMessage -To "Empfangsadresse@Empfangsadresse.com" -From "Sendeadresse@Sendeadresse.com" -Subject "Das ist der Betreff" -Body " Computername: $env:computername User: $env:UserDomain $env:USERNAME Date: $date Reason:$x"  -SmtpServer "mailrelay"  
    $x
}

Schönen Gruß und Dank für eure Tipps,
Stecken

PS: Eigentlich will ich das Ganze über eine GPO machen, mit einem Scheduled Task lässt sich aber schneller Testen um herauszufinden woran es liegt. (über eine GPO, die das Script beim Login ausführen soll hatte es urpsprünglich auch nicht geklappt).

Content-Key: 83018940576

Url: https://administrator.de/contentid/83018940576

Printed on: June 2, 2024 at 12:06 o'clock

Member: Celiko
Celiko Jan 15, 2024 at 15:06:34 (UTC)
Goto Top
Moin,

wie sind denn eure ExecutionPolicies definiert auf den Servern?
Kannst du mal folgendes in die interaktive Konsole eingeben:
Get-ExecutionPolicy -List

Welche Parameter gibst du im Scheduled Task unter General & Action mit? (muss im User-Kontext laufen "Run only when user is logged on").

Das Script selbst sollte nicht das Problem sein. Funktioniert bei mir auf einem Server.

VG
Celiko
Member: Stecken
Stecken Jan 16, 2024 updated at 08:20:08 (UTC)
Goto Top
Hi Celiko,
danke für dein Antwort.
Die Execution Policy hatte ich zum Test per GPO "aufgemacht"
gpo
Womit ich bei UserPolicy mit "Unrestricted" eigentlich kein Problem haben sollte
psexecutionpolicy
Gruß und Dank

Ach ja, im Schedulde Task habe ich unter Actions folgendes:
scheduledtaskaction

Unter "General" aktuell einen Service Account mit "Run whether user is logged on or not"
Teste aktuell ja nur indem ich den Schedule Task über den Trigger immer in 2 Minuten starten lasse (erstmal ohne Login Trigger). Wenn das dann geht kümmere ich mich darum, dass der Task beim Login anspringt bzw. dann will ich das ja sowieso komplett über GPO machen.
Mitglied: 10138557388
10138557388 Jan 16, 2024 updated at 09:27:05 (UTC)
Goto Top
Hier ist der Fehler
Unter "General" aktuell einen Service Account mit "Run whether user is logged on or not"
Wenn das aber nicht der sich gerade anmeldenende User ist wird niemals eine GUI erscheinen!
Die GUI kann nur erscheinen wenn sie im Kontext des angemeldeten Users ausgeführt wird, denn nur dieser hat eine GUI Session! Der Service-Account hat aber keine GUI Session, ergo wird die GUI auch niemals sichtbar beim angemeldeten User ausgeführt werden, also ein völlig normales Verhalten !
Es darf also kein Account im Task hinterlegt werden, sondern es muss im Kontext des Users ausgeführt werden also "Run only when user is logged on" gewählt werden.

Des weiteren setzt man in PowerShell Skripten des Aufgabenplaners folgende Parameter
-EP ByPass -File "c:\pfad\script.ps1"  
Dann ist die ExecutionPolicy für das Script außer Gefecht.

PJ.
Member: Celiko
Celiko Jan 16, 2024 at 09:20:44 (UTC)
Goto Top
Moin,

Wie pjumper bereits erwähnt hat und ich vermutet habe liegt das Problem eher am scheduled task.

Gerne mal den task anpassen wie oben genannt und nochmal berichten 👍

Vg